Présentation du document

NB : Ce script est un document de travail.

Il étudie les communes nouvelles en se focalisant sur les différences entre les communes fusionnantes et leurs voisines.

Il est mis à disposition dans une logique de science ouverte.

Ce travail s’inscrit dans le cadre d’une étude plus générale sur les communes nouvelles :

https://cv.hal.science/gabriel-bideau

Licence CC-BY-NC-SA.

Il est possible d’accéder au code de ce Markdown ici : https://gbideau.github.io/CN_etude_voisines/etude_voisines.Rmd

Les données utilisées pour jouer le code sont regroupées ici : https://gbideau.github.io/CN_data/

Ne pas hésiter à contacter l’auteur () pour toute question.

Objectifs

Regarder la différence entre une commune et ses voisines. Catégoriser en fonction des communes fusionnantes, des autres etc. : réflexion à l’aide d’une boucle pour voir des écarts entre les communes voisines. Sur une variable donnée (taux de chômage, taux d’endettement etc) et pour chaque commune ayant fusionné : • quelle est la moyenne des différences entre cette commune et chacune de ces communes limitrophes avec lesquelles elle n’a pas fusionné ; • quelle est la moyenne des différences entre cette commune et chacune des communes limitrophes (ou non ?) avec lesquelles elle a fusionné.

Préparation des données

Choix des variables

variables_budg <- c("dgf_prct", "charge_prct", "perso_prct", "depinv_prct", "equip_prct", "dette_prct")

selecVar_elect_2012 <- c("PR2012_T1_Abst_prct_insc", "PR2012_T1_prct_insc_LE.PEN", "PR2012_T1_prct_insc_SARKOZY", "PR2012_T1_prct_insc_MÉLENCHON", "PR2012_T1_prct_insc_BAYROU", "PR2012_T1_prct_insc_HOLLANDE")
selecVar_elect_2017 <- c("PR2017_T1_Abst_prct_insc", "PR2017_T1_prct_insc_LE.PEN", "PR2017_T1_prct_insc_FILLON", "PR2017_T1_prct_insc_MÉLENCHON", "PR2017_T1_prct_insc_MACRON", "PR2017_T1_prct_insc_HAMON")
selecVar_elect_2022 <- c("PR2022_T1_Abst_prct_insc", "PR2022_T1_prct_insc_LE.PEN", "PR2022_T1_prct_insc_MACRON", "PR2022_T1_prct_insc_MÉLENCHON", "PR2022_T1_prct_insc_ZEMMOUR")


liste_variables <- list("P09_CHOM1564_RT", "C09_ACTOCC_OUT_RT", "P11_FoyFisc_Imp_RT", "C09_ACT1564_Agr_RT", "superficie", "P09_POP0014Y_RT", "P09_POP1529Y_RT", "P09_POP6074Y_RT",
                        selecVar_elect_2012, selecVar_elect_2017, selecVar_elect_2022,
                        variables_budg,
                        c("P09_CHOM1564_RT", "C09_ACTOCC_OUT_RT", "C09_ACT1564_Agr_RT"))


liste_variables <- list("P09_CHOM1564_RT", "C09_ACTOCC_OUT_RT", "P11_FoyFisc_Imp_RT", "C09_ACT1564_Agr_RT", "superficie", "P09_POP0014Y_RT", "P09_POP1529Y_RT", "P09_POP6074Y_RT", "P09_POP",
                        selecVar_elect_2012, selecVar_elect_2017, selecVar_elect_2022,
                        "PR2022_T1_Abst_prct_insc", "PR2022_T1_prct_insc_LE.PEN", "PR2022_T1_prct_insc_MACRON", "PR2022_T1_prct_insc_MÉLENCHON", "PR2022_T1_prct_insc_ZEMMOUR",
                        variables_budg,
                        "dgf_prct", "charge_prct", "perso_prct", "depinv_prct", "equip_prct", "dette_prct",
                        c("P09_CHOM1564_RT", "C09_ACTOCC_OUT_RT", "C09_ACT1564_Agr_RT"))

# Si on veut étudier les variables une par une, pas par blocs
liste_variables_uniques <- unique(unlist(liste_variables))

# En excluant les variables politiques (qui ne sont traitées qu'en listes)
liste_variables_uniques_sans_polit <- liste_variables_uniques[-which(str_detect(liste_variables_uniques, "PR20") == TRUE)]

Import des données

load("data/refdata.Rdata")

load("data/refdata_budgets_2011-2022.Rdata")

dep <- st_read("data/geom.gpkg", layer = "dep", quiet = TRUE)

geom2011 <- st_read("data/geom.gpkg", layer = "geom2011", quiet = TRUE) 
# geomfus2011 <- st_read("data/geom.gpkg", layer = "geomfus2011", quiet = TRUE)

datafus2011 <- subset(df2011, COM_NOUV == "OUI")


# Import des données électorales 2012 et 2022 aux géométries auxquelles elles sont publiées
noms_scrutins_presid <- c("PR2012_T1")
for (nom_scrutin in noms_scrutins_presid) {
scrutin <- read.table(paste0("data/elections/", nom_scrutin, ".csv"), sep="\t", colClasses = "character", head = TRUE, stringsAsFactors = TRUE) # Pour connaître la longueur du tableau
scrutin <- read.table(paste0("data/elections/", nom_scrutin, ".csv"), sep="\t", colClasses = c(rep("character", 2), rep("numeric", length(scrutin) -2)), head = TRUE, stringsAsFactors = TRUE, dec =",")
assign(nom_scrutin, scrutin)}

# Import des données électorales compilées
noms_scrutins_presid_df2011 <- c("PR2017_T1", "PR2022_T1")
# Import données concernant les communes fusionnantes à partir des bureaux de vote
for (nom_scrutin in noms_scrutins_presid_df2011) {
  scrutin <- read.table(paste0("data/elections/", nom_scrutin, "_geom2011.csv"),
                        sep="\t", colClasses = "character", head = TRUE, stringsAsFactors = TRUE)
  # On refait l'import maintenant qu'on connaît la longueur du tableau, en spécifiant le type de données
  scrutin <- read.table(paste0("data/elections/", nom_scrutin, "_geom2011.csv"), sep="\t", colClasses = c(rep("character", 13), rep("numeric", length(scrutin) -13)), head = TRUE, stringsAsFactors = TRUE, dec =",")
  assign(paste0("df2011_", nom_scrutin), scrutin)}
rm(scrutin, nom_scrutin)

colnames(PR2012_T1) <- paste0("PR2012_T1_", colnames(PR2012_T1))
colnames(df2011_PR2017_T1)[14:ncol(df2011_PR2017_T1)] <- paste0("PR2017_T1_", colnames(df2011_PR2017_T1)[14:ncol(df2011_PR2017_T1)])
colnames(df2011_PR2022_T1)[14:ncol(df2011_PR2022_T1)] <- paste0("PR2022_T1_", colnames(df2011_PR2022_T1)[14:ncol(df2011_PR2022_T1)])

Jonction des données

test_geom <- merge(geom2011, df2011, by = "CODGEO")

colnames(test_geom)
##   [1] "CODGEO"                       "LIBGEO"                      
##   [3] "CODE_DEPT"                    "CATAEU2010"                  
##   [5] "REG"                          "ARR"                         
##   [7] "CV"                           "UU2010"                      
##   [9] "AU2010"                       "ZE2010"                      
##  [11] "EPCI"                         "P09_ACT1564"                 
##  [13] "P09_CHOM1564"                 "P09_ETUD1564"                
##  [15] "P09_RETR1564"                 "C09_ACT1564_Agr"             
##  [17] "C09_ACT1564_ArtCom"           "C09_ACT1564_Cadr"            
##  [19] "C09_ACT1564_ProfInt"          "C09_ACT1564_Empl"            
##  [21] "C09_ACT1564_Ouvr"             "P09_EMPLT"                   
##  [23] "C09_EMPLT_AGRI"               "C09_EMPLT_INDUS"             
##  [25] "C09_EMPLT_CONST"              "C09_EMPLT_CTS"               
##  [27] "C09_EMPLT_APESAS"             "P09_ACTOCC"                  
##  [29] "P09_POP"                      "P09_POP0014"                 
##  [31] "P09_POP1529"                  "P09_POP3044"                 
##  [33] "P09_POP4559"                  "P09_POP6074"                 
##  [35] "P09_POP75P"                   "C09_ACTOCC_IN"               
##  [37] "C09_ACTOCC_OUT"               "C09_ACTOCC"                  
##  [39] "P11_POT_FIN"                  "P11_DGF"                     
##  [41] "P11_FoyFisc"                  "P11_Rev_Fisc"                
##  [43] "P11_IMP_NET"                  "P11_FoyFisc_Imp"             
##  [45] "superficie"                   "ZAU_POL"                     
##  [47] "ZAU_RUR"                      "ZAU_MAR_SP"                  
##  [49] "ZAU_MAR"                      "ZAU_PERI"                    
##  [51] "ZAU_AU"                       "FUSION"                      
##  [53] "ChefLieu"                     "ComDLG"                      
##  [55] "FusDate"                      "FusPhas"                     
##  [57] "COM_NOUV"                     "CODGEO_new"                  
##  [59] "LIBGEO_new"                   "P09_CHOM1564_RT"             
##  [61] "P09_ETUD1564_RT"              "P09_RETR1564_RT"             
##  [63] "C09_ACT1564_Agr_RT"           "C09_ACT1564_ArtCom_RT"       
##  [65] "C09_ACT1564_Cadr_RT"          "C09_ACT1564_ProfInt_RT"      
##  [67] "C09_ACT1564_Empl_RT"          "C09_ACT1564_Ouvr_RT"         
##  [69] "C09_EMPLT_AGRI_RT"            "C09_EMPLT_INDUS_RT"          
##  [71] "C09_EMPLT_CONST_RT"           "C09_EMPLT_CTS_RT"            
##  [73] "C09_EMPLT_APESAS_RT"          "P09_POP0014Y_RT"             
##  [75] "P09_POP1529Y_RT"              "P09_POP3044Y_RT"             
##  [77] "P09_POP4559Y_RT"              "P09_POP6074Y_RT"             
##  [79] "P09_POP75PY_RT"               "C09_ACTOCC_IN_RT"            
##  [81] "C09_ACTOCC_OUT_RT"            "C09_EMP_CONC_RT"             
##  [83] "P11_POT_FIN_RT"               "P11_DGF_RT"                  
##  [85] "P11_Rev_Fisc_RT"              "P11_IMP_NET_RT"              
##  [87] "P11_FoyFisc_Imp_RT"           "pop_legale_budgets"          
##  [89] "nomsst1"                      "nomsst2"                     
##  [91] "prod"                         "impo1"                       
##  [93] "impo2"                        "dgf"                         
##  [95] "charge"                       "perso"                       
##  [97] "achat"                        "subv"                        
##  [99] "res1"                         "recinv"                      
## [101] "fctva"                        "depinv"                      
## [103] "equip"                        "remb"                        
## [105] "res2"                         "dette"                       
## [107] "annu"                         "fdr"                         
## [109] "bth"                          "bfb"                         
## [111] "bfnb"                         "pth"                         
## [113] "pfb"                          "pfnb"                        
## [115] "tth"                          "Pop_INSEE"                   
## [117] "Pop_DGF"                      "DotationNmoins1PerimN"       
## [119] "PotFin4taxes"                 "Effort_fiscal"               
## [121] "Voirie_en_m"                  "Dotation_forfaitaireN"       
## [123] "DSU_tot"                      "DNP_princip"                 
## [125] "DNP_sortie"                   "DNP_major"                   
## [127] "DNP_tot"                      "DSR_bourg_centre_global"     
## [129] "DSR_pereq_global"             "DSR_cible_global"            
## [131] "fprod"                        "fimpo1"                      
## [133] "fimpo2"                       "fdgf"                        
## [135] "fcharge"                      "fperso"                      
## [137] "fachat"                       "fsubv"                       
## [139] "fres1"                        "frecinv"                     
## [141] "ffctva"                       "fdepinv"                     
## [143] "fequip"                       "fremb"                       
## [145] "fres2"                        "fdette"                      
## [147] "fannu"                        "ffdr"                        
## [149] "fbth"                         "fbfb"                        
## [151] "fbfnb"                        "fpth"                        
## [153] "fpfb"                         "strateCN"                    
## [155] "surface"                      "densite"                     
## [157] "depenses_tot"                 "prod_prct"                   
## [159] "impo1_prct"                   "impo2_prct"                  
## [161] "dgf_prct"                     "charge_prct"                 
## [163] "perso_prct"                   "achat_prct"                  
## [165] "subv_prct"                    "res1_prct"                   
## [167] "recinv_prct"                  "fctva_prct"                  
## [169] "depinv_prct"                  "equip_prct"                  
## [171] "remb_prct"                    "res2_prct"                   
## [173] "dette_prct"                   "annu_prct"                   
## [175] "fdr_prct"                     "bth_prct"                    
## [177] "bfb_prct"                     "bfnb_prct"                   
## [179] "pth_prct"                     "pfb_prct"                    
## [181] "pfnb_prct"                    "tth_prct"                    
## [183] "DotationNmoins1PerimN_prct"   "PotFin4taxes_prct"           
## [185] "Dotation_forfaitaireN_prct"   "DSU_tot_prct"                
## [187] "DNP_princip_prct"             "DNP_sortie_prct"             
## [189] "DNP_major_prct"               "DNP_tot_prct"                
## [191] "DSR_bourg_centre_global_prct" "DSR_pereq_global_prct"       
## [193] "DSR_cible_global_prct"        "geometry"
test_geom <- merge(test_geom, PR2012_T1, by.x = "CODGEO", by.y = "PR2012_T1_CODGEO", all.x = TRUE)
test_geom <- merge(test_geom, df2011_PR2017_T1, by = "CODGEO", all.x = TRUE)
test_geom <- merge(test_geom, df2011_PR2022_T1, by = "CODGEO", all.x = TRUE)
test_geom$P09_POP <- as.numeric(test_geom$P09_POP)

Préparations pour graphiques

CategZAU <- c("Unité urbaine\nd'un grand pôle", "Couronne d'un\ngrand pôle", " Multipolarisée des\ngrandes aires\nurbaines", "Unité urbaine\nd'un pôle moyen", "Couronne d'un\npôle moyen", "Unité urbaine\nd'un petit pôle", "Couronne d'un\npetit pôle", "Autre commune\nmultipolarisée", "Commune isolée\nhors influence\ndes pôles")

Analyse distance statistique en comparant les voisines

Choix du type de voisinage

Les communes, lorsqu’elles fusionnent, n’ont en fait qu’un nombre de choix limité. En effet, la création d’une commune nouvelle n’est possible que pour un ensemble continu (et sans enclave), c’est-à-dire que les communes ne peuvent fusionner, cela paraît logique, qu’avec leurs voisines. Il est donc utile d’intégrer la question de la contiguïté pour déterminer si les communes choisissent, parmi leurs voisines, des communes plutôt similaires ou différentes. Au moment du codage de ces éléments, on choisit de considérer des communes contigües à partir du moment où elles se touchent par un point (soit le voisinage « Reine » ou « Queen », par analogie avec le jeu d’échecs) puisque le faite de partager un segment de frontière (voisinage « Tour » ou « Rook ») n’est pas nécessaire. Cette différence est faible dans le cas des communes françaises mais pas tout à fait nulle. Ainsi, dans la carte suivante sur les communes du Maine-et-Loire, on a rajouté en rouge les contigüités qui n’existent que lorsqu’on prend en compte le modèle de la Reine, ce qui n’est pas inexistant (les liens bleus étant ceux des voisinages « Tour », qui existent uniquement en cas de voisinage « Reine » (Bellefon, Loonis et Le Gleut 2018).

library(spdep)

test_geom_carte <- merge(geom2011, df2011[, c("CODGEO", "CODE_DEPT", "COM_NOUV", "P09_POP", "LIBGEO")], by = "CODGEO")
test_geom_carte <- subset (test_geom_carte, CODE_DEPT == "49" )

test_queen <- poly2nb(test_geom_carte, queen = TRUE)
test_rook <- poly2nb(test_geom_carte, queen = FALSE)

# On change de type d'objet pour faciliter les représentations
test_geom_carte <- as(test_geom_carte, "Spatial")

# Représentation graphique des deux manières de calculer les voisinages dans le cas du département du Maine-et-Loire
plot(test_geom_carte, border="lightgray", main = "Le voisinage des communes\ndans le département du Maine-et-Loire (49)",
     cex.main=1, # taille titre
     font.main=1, # type (1 : normal, 2 : gras)
     )
plot(test_queen, coordinates(test_geom_carte),add=TRUE,col="red")
plot(test_rook, coordinates(test_geom_carte),add=TRUE,col="blue")
legend(title = "Type de voisinage", x="bottomright", legend=c("« Tour »","Uniquement « Reine »"), col=c("blue","red"),
       lty=1, # type de figuré dans la légende
       cex=0.7, # taille légende
       box.lty=0, # supprime bordure
       bg=NA # Pas de couleur en arrière-plan de la légende
       )

Analyse

Une fois cette matrice de voisinage définie, il n’est pas aisé de sélectionner la mesure qui permettra de rendre compte des différences entre communes voisines. Une première solution est d’observer la distance statistique entre une commune fusionnante donnée et ses communes limitrophes. la distance statistique est une mesure synthétisant la proximité de valeurs, dans notre cas principalement des pourcentages. Pour calculer cette distance statistique, la métrique euclidienne est ici utilisée car ce choix est souvent fait dans des sujets potentiellement destinés à des acteurs publics, du fait de sa facilité de lecture (c’est par exemple le choix fait au sein du programme Espon – European Observation Network for Territorial Development and Cohesion). Il faut noter qu’on ne peut, en revanche, pas déduire de cette distance statistique que telle ou telle commune serait plus favorisée qu’une autre : une distance statistique importante n’indique pas si la commune de référence est favorisée ou non du point de vue de la variable étudiée ; elle n’indique d’ailleurs pas si cette différence est positive ou négative, elle indique simplement l’éloignement des variables. Cette distance statistique peut être calculée pour une variable donnée (par exemple la superficie) ou pour un ensemble de variables (par exemple différentes variables budgétaires. On calcule donc, d’un côté, la moyenne des distances statistiques entre une commune fusionnante donnée et ses voisines appartenant à la même commune voisine (valeur (A) dans la Table n°3) et d’un autre côté la moyenne des distances statistiques entre une commune fusionnante donnée et les voisines avec lesquelles elle ne fusionne pas (B). La différence entre ces deux valeurs (B-A) nous renseigne alors sur la plus grande proximité de la commune donnée, soit avec les voisines avec lesquelles elle fusionne, soit avec les voisines avec lesquelles elle ne fusionne pas. Quand cette différence (B-A) est positive, la commune fusionnante est statistiquement plus proche des communes avec lesquelles elle a fusionné que des autres communes voisines avec lesquelles elle n’a pas fusionné. En revanche, quand la différence est négative, cela veut dire que la distance statistique entre communes ayant fusionné entre elles est plus importante que la distance statistique avec ses communes voisines. Les résultats seront présentés dans la section 2.2.

# Si on part du package rgeoda
queen_w <- queen_weights(test_geom, order=1, include_lower_order = FALSE, precision_threshold = 0)


# On crée le vecteur qui va abriter les résultats pour l'ensemble des variables
tableau_synth <- data.frame()

class(liste_variables)
## [1] "list"
variables_a_etudier <- liste_variables[3]
class(variables_a_etudier)
## [1] "list"
for (variables_a_etudier in liste_variables) {

variables_a_etudier <-unlist(variables_a_etudier)

test_data <- test_geom[, c("CODGEO", "CODGEO_new", "LIBGEO", "LIBGEO_new", "COM_NOUV", variables_a_etudier)]
st_geometry(test_data) <- NULL

test_data_Cfus <- subset(test_data, test_data$COM_NOUV == "OUI")

resultats <- data.frame() # Pour accueillir les résultats
CODGEO_com<- test_data_Cfus$CODGEO[10] # Pour tests

for (CODGEO_com in test_data_Cfus$CODGEO) { # Pour chaque commune ayant fusionné
  # On identifie la commune
  numcom <- which(test_data$CODGEO==CODGEO_com)
  CODGEO_new_com <- test_data$CODGEO_new[numcom]

  # On liste les voisines, par l'identifiant de leur ligne
  numvoisines <- get_neighbors(queen_w, idx = numcom)
  # CODGEO_voisines <- test_data$CODGEO[numvoisines]
  nbr_voisines <- length(numvoisines)
  # num_voisine <- numvoisines[2]
  # test_data$CODGEO[numvoisines]
  # On sélectionne uniquement les communes limitrophes
  test_data_subset <- test_data[numvoisines,]
  # On renseigne, dans un nouveau champs, si ces communes appartiennent à la même commune nouvelle ou non
  test_data_subset$lien <- ifelse(test_data_subset$CODGEO_new == CODGEO_new_com,# Si le CODGEO_new de la commune est le même que celui de la commune fusionnante qu'on étudie
                                  "meme_CN", # Si oui, on indique que c'est la même commune
                                  "pas_meme_CN" # Si non, on l'indique
                                  )
  result_dist <- c() # Pour archiver les résultats de distance

  CODGEO_voisine <- test_data_subset$CODGEO[2]
  
  for (CODGEO_voisine in test_data_subset$CODGEO ) { # Pour chaque commune voisine
    tmp <- subset(test_data, test_data$CODGEO == CODGEO_voisine |
                    test_data$CODGEO == CODGEO_com)
    dist <- dist(tmp[, variables_a_etudier], method = "euclidian")
    result_dist <- c(result_dist, dist)
  } # Fin boucle calcul distance avec chacune des voisines
  
  test_data_subset$dist <- result_dist
  
  # On fait deux tableaux différents pour être certains que les moyennes ne se mélangent pas si les vecteurs n'ont pas le même ordre
  test_data_subset_meme_CN <- subset(test_data_subset, lien == "meme_CN")
  nbr_voisines_fus <- nrow(test_data_subset_meme_CN) # On compte le nombre de voisines appartenant à la même CN
  test_data_subset_pas_meme_CN <- subset(test_data_subset, lien == "pas_meme_CN")
  nbr_voisines_Nfus <- nrow(test_data_subset_pas_meme_CN) # On compte le nombre d'autres voisines
  
  com_etud <- c(CODGEO_com, nbr_voisines, nbr_voisines_fus, nbr_voisines_Nfus, mean(test_data_subset_meme_CN$dist), mean(test_data_subset_pas_meme_CN$dist))
  
  resultats <- rbind(resultats, com_etud, stringsAsFactors = FALSE)
} # Fin boucle pour une commune

# NB : Pourrait valoir le coup de standardiser les données, mais à voir à quel moment...


colnames(resultats) <- c("CODGEO", "Nombre de voisines", "Nombre de voisines avec lesquelles la commune a fusionné", "Nombre de voisines avec lesquelles la commune n'a pas fusionné", "Moyenne de la distance euclidienne avec les communes avec lesquelles la commune a fusionné", "Moyenne de la distance euclidienne avec les communes avec lesquelles la commune n'a pas fusionné")

# assign(paste0("Compar_moy_", variable), results)


# On passe les variables en numérique
resultats[2:ncol(resultats)] <- apply(resultats[2:ncol(resultats)], 2, as.numeric)

summary(resultats)

# On crée une variable indiquant la différence
resultats$Différence <- resultats$`Moyenne de la distance euclidienne avec les communes avec lesquelles la commune n'a pas fusionné` - resultats$`Moyenne de la distance euclidienne avec les communes avec lesquelles la commune a fusionné`


result_variable <- c(paste(variables_a_etudier, collapse = "_"), mean(resultats[,5], na.rm = TRUE), mean(resultats[,6], na.rm = TRUE))

tableau_synth <- rbind(tableau_synth, result_variable, stringsAsFactors = FALSE)


pr_carto <- merge(geom2011, resultats, by = "CODGEO")
pr_carto <- merge(pr_carto, df2011[, c("CODGEO", "REG")], by = "CODGEO")
# pr_carto <- subset(pr_carto, REG == "23" | REG == "25"| REG == "53"| REG == "52") # Normandies, Bretagne, Pays-de-la-Loire
pr_carto <- subset(pr_carto, REG == "23"| REG == "25") # Normandies

# Carte distance euclidienne communes fusionnant ensemble
# choroLayer(x = pr_carto , var = "Moyenne de la distance euclidienne avec les communes avec lesquelles la commune a fusionné",
#            col = carto.pal(pal1 = "blue.pal", n1 = 4), method = "quantile", nclass = 4,
#            legend.values.rnd = 2, legend.pos = "topleft", 
#            legend.title.txt = paste0("Moyenne de la distance euclidienne\nentre les communes fusionnant ensemble\n", result_variable[1]),
#            legend.title.cex = 1, legend.values.cex = 0.8)
# layoutLayer(
#   # title = "La moyenne de la distance euclidienne avec les communes fusionnant entre elles",
#   #coltitle = "black", 
#   sources = "Source : INSEE, 2024", scale = NULL,
#   author = "Auteur : G. Bideau.", frame ="", col = NA)
# plot(dep$geom, col = NA, lwd = 1, add = TRUE)

# Carte distance euclidienne communes ne fusionnant pas ensemble
# choroLayer(x = pr_carto , var = "Moyenne de la distance euclidienne avec les communes avec lesquelles la commune n'a pas fusionné",
#            col = carto.pal(pal1 = "blue.pal", n1 = 4), method = "quantile", nclass = 4,
#            legend.values.rnd = 2, legend.pos = "topleft", 
#            legend.title.txt = paste0("Moyenne de la distance euclidienne\nentre les communes ne fusionnant pas ensemble\n", result_variable[1]),
#            legend.title.cex = 1, legend.values.cex = 0.8)
# layoutLayer(title = "La moyenne de la distance euclidienne avec les communes ne fusionnant pas entre elles",
#   #coltitle = "black", 
#   sources = "Source : INSEE, 2024", scale = NULL, author = "Auteur : G. Bideau.", frame ="", col = NA)
# plot(dep$geom, col = NA, lwd = 1, add = TRUE)

# Carte différence des distances euclidiennes
choroLayer(x = pr_carto , var = "Différence",
           col = carto.pal(pal1 = "red.pal", n1 = 2, pal2 = "blue.pal", n2 = 2), method = "quantile", nclass = 4,
           legend.values.rnd = 2, legend.pos = "topleft", 
           legend.title.txt = paste0("Différence de distance euclidienne\n(communes avec lesquelles elle n'a pas fusionné\n- communes avec lesquelles elle a fusionné)\n", result_variable[1]),
           legend.title.cex = 1, legend.values.cex = 0.8)
layoutLayer(
  # title = "Différence de distance euclidienne\n(communes avec lesquelles elle a fusionné\n- communes avec lesquelles elle a fusionné)",
  #coltitle = "black", 
  sources = "Source : INSEE, 2024", scale = NULL, author = "Auteur : G. Bideau.", frame ="", col = NA)
plot(dep$geom, col = NA, lwd = 1, add = TRUE)



assign(paste0("dist_eucl_", result_variable[1]), resultats)

}

Réalisation tableau

colnames(tableau_synth) <- c("Variable(s) étudiée(s)", "Même commune nouvelle", "Voisine mais pas de fusion")
tableau_synth[2:3] <- apply(tableau_synth[2:3], 2, as.numeric)
tableau_synth$Différence <- tableau_synth$`Voisine mais pas de fusion` - tableau_synth$`Même commune nouvelle`
kable(tableau_synth[c(2:4, 1)], digits=2)
Même commune nouvelle Voisine mais pas de fusion Différence Variable(s) étudiée(s)
3.16 3.22 0.07 P09_CHOM1564_RT
14.10 13.53 -0.57 C09_ACTOCC_OUT_RT
6.01 6.23 0.22 P11_FoyFisc_Imp_RT
6.08 6.28 0.19 C09_ACT1564_Agr_RT
10.90 11.38 0.48 superficie
3.41 3.55 0.14 P09_POP0014Y_RT
2.88 2.95 0.08 P09_POP1529Y_RT
3.29 3.57 0.28 P09_POP6074Y_RT
1265.06 1382.08 117.02 P09_POP
10.60 11.29 0.69 PR2012_T1_Abst_prct_insc_PR2012_T1_prct_insc_LE.PEN_PR2012_T1_prct_insc_SARKOZY_PR2012_T1_prct_insc_MÉLENCHON_PR2012_T1_prct_insc_BAYROU_PR2012_T1_prct_insc_HOLLANDE
10.56 11.21 0.65 PR2017_T1_Abst_prct_insc_PR2017_T1_prct_insc_LE.PEN_PR2017_T1_prct_insc_FILLON_PR2017_T1_prct_insc_MÉLENCHON_PR2017_T1_prct_insc_MACRON_PR2017_T1_prct_insc_HAMON
9.19 9.99 0.79 PR2022_T1_Abst_prct_insc_PR2022_T1_prct_insc_LE.PEN_PR2022_T1_prct_insc_MACRON_PR2022_T1_prct_insc_MÉLENCHON_PR2022_T1_prct_insc_ZEMMOUR
3.89 4.38 0.49 PR2022_T1_Abst_prct_insc
4.07 4.47 0.40 PR2022_T1_prct_insc_LE.PEN
4.04 4.19 0.15 PR2022_T1_prct_insc_MACRON
3.15 3.40 0.25 PR2022_T1_prct_insc_MÉLENCHON
1.76 1.90 0.14 PR2022_T1_prct_insc_ZEMMOUR
61.13 62.66 1.53 dgf_prct_charge_prct_perso_prct_depinv_prct_equip_prct_dette_prct
9.88 10.48 0.60 dgf_prct
17.22 17.56 0.34 charge_prct
9.31 9.60 0.28 perso_prct
17.22 17.56 0.34 depinv_prct
17.50 17.79 0.29 equip_prct
42.55 43.68 1.13 dette_prct
17.42 16.96 -0.46 P09_CHOM1564_RT_C09_ACTOCC_OUT_RT_C09_ACT1564_Agr_RT
rm (com_etud, nbr_voisines, nbr_voisines_fus, nbr_voisines_Nfus, CODGEO_com, numvoisines, numcom)

Le tableau final permet d’observer la différence entre la distance statistique d’une commune avec ses voisines avec lesquelles elle n’a pas fusionné et celles avec lesquelles elle a fusionné. Cela signifie que quand cette différence est positive, la commune fusionnante est statistiquement plus proche des communes avec lesquelles elle a fusionné que des autres communes voisines avec lesquelles elle n’a pas fusionné. En revanche, quand la différence est négative, cela veut dire que la distance statistique entre communes ayant fusionné entre elles est plus importante que la distance statistique avec les communes voisines (et ce, que la différence soit positive ou négative d’ailleurs).

La quasi totalité des différences sur les variables étant positives, on en conclu que les communes fusionnantes ont quand même tendance à fusionner plutôt avec des communes plus proches, donc davantage sur une logique homogène. La seule variable qui dénote est le taux d’actifs occupés hors de la commune de résidence, variable décidémment très particulière.

Réalisation boxplots

On réalise ici une série de boxplots permettant d’observer si la distance statistique varie lorsqu’on discrétise en fonction du ZAU ou de l’appartenance régionale. Globalement, peu de différences, quelles que soient ces variables.

variables_a_etudier <- liste_variables[9]
variables_a_etudier <- liste_variables[2]

for (variables_a_etudier in liste_variables_uniques_sans_polit) {# Pour une variable donnée
  tableau <- get(paste0("dist_eucl_", variables_a_etudier)) # On sélectionne les données concernant la distance euclidienne
  colnames(tableau)
  
  pr_graph <- melt(tableau[, c("CODGEO", 
                           "Moyenne de la distance euclidienne avec les communes avec lesquelles la commune a fusionné",
                           "Moyenne de la distance euclidienne avec les communes avec lesquelles la commune n'a pas fusionné")],
               id.vars = "CODGEO")
  
  
  pr_graph <- merge(pr_graph, df2011[, c("CODGEO", "CATAEU2010", "CODE_DEPT", "REG")], by = "CODGEO")
  
  labels_variable <- c("Communes avec lesquelles\nla commune a fusionné", "Communes avec lesquelles\nla commune n'a pas fusionné")
  
  boxplot <- ggplot(pr_graph, aes(x = CATAEU2010, y = value, color = variable)) +
    geom_boxplot(varwidth = FALSE) +
    # scale_color_manual(values=couleurs , labels = labels_COM_NOUV) +
    ylab(paste0("Moyenne de la distance euclidienne\npour l'ensemble des communes fusionnantes")) +
    xlab("Code ZAU") +
    scale_color_manual(values = c("red", "blue"), labels = labels_variable) +
    ggtitle(paste0("Comparaison des moyennes des distances statistiques\n", variables_a_etudier))
  # print (boxplot)
  
  
  # On modifie éventuellement le graphique pour le rendre plus lisible si valeurs extrêmes
  pr_calculs <- c(tableau$`Moyenne de la distance euclidienne avec les communes avec lesquelles la commune a fusionné`, tableau$`Moyenne de la distance euclidienne avec les communes avec lesquelles la commune n'a pas fusionné`)
  upper.limit <- quantile(pr_calculs, na.rm = TRUE)[4] + 20*IQR(pr_calculs, na.rm = TRUE)
  lower.limit <- quantile(pr_calculs, na.rm = TRUE)[2] - 20*IQR(pr_calculs, na.rm = TRUE)

    print(boxplot + coord_cartesian(ylim=c(0, upper.limit)))
    
  # Possibilité de vérifier la fiabilité des données avec le test de Kruskal-Wallis
  ## https://www.datanovia.com/en/fr/lessons/test-de-kruskal-wallis-dans-r/
  # res.kruskal <- pr_graph %>% kruskal_test(value ~ CATAEU2010)
  # print(as.data.frame(res.kruskal))
  
  boxplot <- ggplot(pr_graph, aes(x = REG, y = value, color = variable)) +
    geom_boxplot(varwidth = FALSE) +
    # scale_color_manual(values=couleurs , labels = labels_COM_NOUV) +
    ylab(paste0("Moyenne de la distance euclidienne\npour l'ensemble des communes fusionnantes")) +
    xlab("Région") +
    scale_color_manual(values = c("red", "blue"), labels = labels_variable) +
    ggtitle(paste0("Comparaison des moyennes des distances statistiques\n", variables_a_etudier))
  # print (boxplot)
  print(boxplot + coord_cartesian(ylim=c(0, upper.limit)))

   }

Analyse en comparaison plus élevée/plus basse

Pour observer si les voisines d’une commune fusionnante avec lesquelles elle fusionne sont plus ou moins favorisées que les voisines avec lesquelles elle ne fusionne pas, il est possible, de manière exploratoire, d’observer pour certaines variables si les unes ou les autres ont généralement des valeurs plus ou moins élevées.

Analyse

# Si on part du package rgeoda
queen_w <- queen_weights(test_geom, order=1, include_lower_order = FALSE, precision_threshold = 0)


# On crée le vecteur qui va abriter les résultats pour l'ensemble des variables
tableau_synth <- data.frame()

variables_a_etudier <- liste_variables_uniques[9]

for (variables_a_etudier in liste_variables_uniques) {


test_data <- test_geom[, c("CODGEO", "CODGEO_new", "LIBGEO", "LIBGEO_new", "COM_NOUV", variables_a_etudier)]
st_geometry(test_data) <- NULL

test_data_Cfus <- subset(test_data, test_data$COM_NOUV == "OUI")

resultats <- data.frame() # Pour accueillir les résultats
CODGEO_com <- test_data_Cfus$CODGEO[10] # Pour tests

for (CODGEO_com in test_data_Cfus$CODGEO) { # Pour chaque commune ayant fusionné
  # On identifie la commune
  numcom <- which(test_data$CODGEO==CODGEO_com)
  CODGEO_new_com <- test_data$CODGEO_new[numcom]

  # On liste les voisines, par l'identifiant de leur ligne
  numvoisines <- get_neighbors(queen_w, idx = numcom)
  # CODGEO_voisines <- test_data$CODGEO[numvoisines]
  nbr_voisines <- length(numvoisines)
  # num_voisine <- numvoisines[2]
  # test_data$CODGEO[numvoisines]
  # On sélectionne uniquement les communes limitrophes
  test_data_subset <- test_data[numvoisines,]
  # On renseigne, dans un nouveau champs, si ces communes appartiennent à la même commune nouvelle ou non
  test_data_subset$lien <- ifelse(test_data_subset$CODGEO_new == CODGEO_new_com,# Si le CODGEO_new de la commune est le même que celui de la commune fusionnante qu'on étudie
                                  "meme_CN", # Si oui, on indique que c'est la même commune
                                  "pas_meme_CN" # Si non, on l'indique
                                  )
  
  
  # On crée des tableaux pour les communes fusionnant ensemble et pour les autres. Dans chaque cas, on fait la moyenne et on compte le nombre de communes
  test_data_subset_meme_CN <- subset(test_data_subset, lien == "meme_CN")
  nbr_voisines_fus <- nrow(test_data_subset_meme_CN) # On compte le nombre de voisines appartenant à la même CN
  moy_comfus <- mean(test_data_subset_meme_CN[, variables_a_etudier])
  
  test_data_subset_pas_meme_CN <- subset(test_data_subset, lien == "pas_meme_CN")
  nbr_voisines_Nfus <- nrow(test_data_subset_pas_meme_CN) # On compte le nombre d'autres voisines
  moy_comNfus <- mean(test_data_subset_pas_meme_CN[, variables_a_etudier])
  
  # On calcule la différence. Si le résultat est positif, les communes noun fusionnantes sont mieux dotées, si le résultat est positif, les communes fusionnantes sont mieux dotées, si le résultat est proche de zéro (regarder l'ordre de grandeur avec les moyennes données), il y a peu de différence
  difference_moy = moy_comNfus - moy_comfus
  
  # On sauvegarde les résultats
  com_etud <- c(CODGEO_com, nbr_voisines, nbr_voisines_fus, nbr_voisines_Nfus, moy_comfus, moy_comNfus, difference_moy)
  
  resultats <- rbind(resultats, com_etud, stringsAsFactors = FALSE)
} # Fin boucle pour une commune

# NB : Pourrait valoir le coup de standardiser les données, mais à voir à quel moment...
colnames(resultats) <- c("CODGEO", "Nombre de voisines", "Nombre de voisines avec lesquelles la commune a fusionné", "Nombre de voisines avec lesquelles la commune n'a pas fusionné", "Moyenne des communes avec lesquelles la commune a fusionné", "Moyenne des communes avec lesquelles la commune n'a pas fusionné", "Différence (Nfus - Cfus)")

# assign(paste0("Compar_moy_", variable), results)


# On passe les variables en numérique
resultats[2:ncol(resultats)] <- apply(resultats[2:ncol(resultats)], 2, as.numeric)

summary(resultats)

result_variable <- c(paste(variables_a_etudier, collapse = "_"), mean(resultats[,5], na.rm = TRUE), mean(resultats[,6], na.rm = TRUE), median(resultats[,5], na.rm = TRUE), median(resultats[,6], na.rm = TRUE))

tableau_synth <- rbind(tableau_synth, result_variable, stringsAsFactors = FALSE)


pr_carto <- merge(geom2011, resultats, by = "CODGEO")
pr_carto <- merge(pr_carto, df2011[, c("CODGEO", "REG")], by = "CODGEO")
# pr_carto <- subset(pr_carto, REG == "23" | REG == "25"| REG == "53"| REG == "52") # Normandies, Bretagne, Pays-de-la-Loire
pr_carto <- subset(pr_carto, REG == "23"| REG == "25") # Normandies



choroLayer(x = pr_carto , var = "Différence (Nfus - Cfus)",
           col = carto.pal(pal1 = "red.pal", n1 = 2, pal2 = "blue.pal", n2 = 2), method = "quantile", nclass = 4,
           legend.values.rnd = 2, legend.pos = "topleft", 
           legend.title.txt = paste0("Différence des moyennes\n(communes avec lesquelles elle n'a pas fusionné\n- communes avec lesquelles elle a fusionné)\n", result_variable[1]),
           legend.title.cex = 1, legend.values.cex = 0.8)
layoutLayer(
  # title = "Différence de distance euclidienne\n(communes avec lesquelles elle a fusionné\n- communes avec lesquelles elle a fusionné)",
  #coltitle = "black", 
  sources = "Source : INSEE, 2024", scale = NULL, author = "Auteur : G. Bideau.", frame ="", col = NA)
plot(dep$geom, col = NA, lwd = 1, add = TRUE)



assign(paste0("dist_eucl_", result_variable[1]), resultats)

}

Résultats sous forme de tableau

tableau_synth[2:5] <- apply(tableau_synth[2:5], 2, as.numeric)
colnames(tableau_synth) <- c("Variable(s) étudiée(s)", "Moyenne même commune nouvelle", "Moyenne voisines mais pas de fusion", "Médiane même commune nouvelle", "Médiane voisines mais pas de fusion")
tableau_synth$Différence_moyenne <- tableau_synth$`Moyenne voisines mais pas de fusion` - tableau_synth$`Moyenne même commune nouvelle`
tableau_synth$Différence_médiane <- tableau_synth$`Médiane voisines mais pas de fusion` - tableau_synth$`Médiane même commune nouvelle`
kable(tableau_synth[c(2:7, 1)], digits=2)
Moyenne même commune nouvelle Moyenne voisines mais pas de fusion Médiane même commune nouvelle Médiane voisines mais pas de fusion Différence_moyenne Différence_médiane Variable(s) étudiée(s)
8.23 8.08 7.85 7.77 -0.15 -0.08 P09_CHOM1564_RT
73.60 73.90 76.08 75.59 0.29 -0.48 C09_ACTOCC_OUT_RT
51.02 51.13 50.25 50.64 0.11 0.39 P11_FoyFisc_Imp_RT
6.34 7.08 4.28 5.37 0.74 1.09 C09_ACT1564_Agr_RT
16.39 18.88 13.45 15.89 2.49 2.44 superficie
19.43 19.38 19.77 19.60 -0.05 -0.16 P09_POP0014Y_RT
14.67 14.45 14.71 14.60 -0.23 -0.11 P09_POP1529Y_RT
14.70 14.92 14.22 14.33 0.22 0.11 P09_POP6074Y_RT
1267.08 1442.01 654.00 709.89 174.93 55.89 P09_POP
14.84 14.82 14.55 14.63 -0.03 0.08 PR2012_T1_Abst_prct_insc
16.37 16.67 16.02 16.43 0.30 0.41 PR2012_T1_prct_insc_LE.PEN
24.12 23.96 24.12 23.71 -0.17 -0.41 PR2012_T1_prct_insc_SARKOZY
8.23 8.32 7.74 8.05 0.09 0.31 PR2012_T1_prct_insc_MÉLENCHON
8.77 8.72 8.48 8.54 -0.06 0.06 PR2012_T1_prct_insc_BAYROU
20.20 20.13 19.67 19.66 -0.08 -0.02 PR2012_T1_prct_insc_HOLLANDE
16.69 16.34 16.54 16.21 -0.35 -0.33 PR2017_T1_Abst_prct_insc
19.81 20.11 19.45 19.73 0.30 0.28 PR2017_T1_prct_insc_LE.PEN
17.58 17.60 17.35 17.07 0.02 -0.28 PR2017_T1_prct_insc_FILLON
13.46 13.56 12.91 13.21 0.10 0.31 PR2017_T1_prct_insc_MÉLENCHON
17.30 17.10 17.05 16.90 -0.20 -0.15 PR2017_T1_prct_insc_MACRON
4.28 4.27 4.08 4.10 -0.01 0.02 PR2017_T1_prct_insc_HAMON
21.75 20.73 21.81 20.73 -1.02 -1.08 PR2022_T1_Abst_prct_insc
21.42 21.85 21.05 21.75 0.42 0.70 PR2022_T1_prct_insc_LE.PEN
21.64 21.38 21.37 21.00 -0.25 -0.37 PR2022_T1_prct_insc_MACRON
12.37 12.53 11.76 12.06 0.16 0.30 PR2022_T1_prct_insc_MÉLENCHON
4.49 4.73 4.21 4.54 0.24 0.33 PR2022_T1_prct_insc_ZEMMOUR
24.28 24.25 23.21 23.44 -0.03 0.23 dgf_prct
64.51 63.96 65.50 64.35 -0.55 -1.15 charge_prct
22.53 22.46 22.40 22.73 -0.07 0.33 perso_prct
35.49 36.04 34.50 35.65 0.55 1.15 depinv_prct
27.20 28.03 25.54 27.52 0.82 1.98 equip_prct
57.04 54.22 52.40 51.54 -2.82 -0.87 dette_prct
kable(tableau_synth, digits=2)
Variable(s) étudiée(s) Moyenne même commune nouvelle Moyenne voisines mais pas de fusion Médiane même commune nouvelle Médiane voisines mais pas de fusion Différence_moyenne Différence_médiane
P09_CHOM1564_RT 8.23 8.08 7.85 7.77 -0.15 -0.08
C09_ACTOCC_OUT_RT 73.60 73.90 76.08 75.59 0.29 -0.48
P11_FoyFisc_Imp_RT 51.02 51.13 50.25 50.64 0.11 0.39
C09_ACT1564_Agr_RT 6.34 7.08 4.28 5.37 0.74 1.09
superficie 16.39 18.88 13.45 15.89 2.49 2.44
P09_POP0014Y_RT 19.43 19.38 19.77 19.60 -0.05 -0.16
P09_POP1529Y_RT 14.67 14.45 14.71 14.60 -0.23 -0.11
P09_POP6074Y_RT 14.70 14.92 14.22 14.33 0.22 0.11
P09_POP 1267.08 1442.01 654.00 709.89 174.93 55.89
PR2012_T1_Abst_prct_insc 14.84 14.82 14.55 14.63 -0.03 0.08
PR2012_T1_prct_insc_LE.PEN 16.37 16.67 16.02 16.43 0.30 0.41
PR2012_T1_prct_insc_SARKOZY 24.12 23.96 24.12 23.71 -0.17 -0.41
PR2012_T1_prct_insc_MÉLENCHON 8.23 8.32 7.74 8.05 0.09 0.31
PR2012_T1_prct_insc_BAYROU 8.77 8.72 8.48 8.54 -0.06 0.06
PR2012_T1_prct_insc_HOLLANDE 20.20 20.13 19.67 19.66 -0.08 -0.02
PR2017_T1_Abst_prct_insc 16.69 16.34 16.54 16.21 -0.35 -0.33
PR2017_T1_prct_insc_LE.PEN 19.81 20.11 19.45 19.73 0.30 0.28
PR2017_T1_prct_insc_FILLON 17.58 17.60 17.35 17.07 0.02 -0.28
PR2017_T1_prct_insc_MÉLENCHON 13.46 13.56 12.91 13.21 0.10 0.31
PR2017_T1_prct_insc_MACRON 17.30 17.10 17.05 16.90 -0.20 -0.15
PR2017_T1_prct_insc_HAMON 4.28 4.27 4.08 4.10 -0.01 0.02
PR2022_T1_Abst_prct_insc 21.75 20.73 21.81 20.73 -1.02 -1.08
PR2022_T1_prct_insc_LE.PEN 21.42 21.85 21.05 21.75 0.42 0.70
PR2022_T1_prct_insc_MACRON 21.64 21.38 21.37 21.00 -0.25 -0.37
PR2022_T1_prct_insc_MÉLENCHON 12.37 12.53 11.76 12.06 0.16 0.30
PR2022_T1_prct_insc_ZEMMOUR 4.49 4.73 4.21 4.54 0.24 0.33
dgf_prct 24.28 24.25 23.21 23.44 -0.03 0.23
charge_prct 64.51 63.96 65.50 64.35 -0.55 -1.15
perso_prct 22.53 22.46 22.40 22.73 -0.07 0.33
depinv_prct 35.49 36.04 34.50 35.65 0.55 1.15
equip_prct 27.20 28.03 25.54 27.52 0.82 1.98
dette_prct 57.04 54.22 52.40 51.54 -2.82 -0.87
rm (com_etud, nbr_voisines, nbr_voisines_fus, nbr_voisines_Nfus, CODGEO_com, numvoisines, numcom)

En observant la différence entre les communes voisines d’une commune fusionnante, selon qu’elles ont fusionné avec ou non, on observe tout d’abord des différences très variables d’une commune à l’autre. Les moyennes ou médianes globales font apparaître peu de différence.

Cela irait dans le sens de fusions qui ne se feraient pas pour se joindre systématiquement à des communes plus favorisées (ou moins d’ailleurs).

Discrétisation par boxplots

On réalise ici une série de boxplots permettant d’observer si la distance statistique varie lorsqu’on discrétise en fonction du ZAU ou de l’appartenance régionale. Globalement, peu de différences, quelles que soient ces variables.

variables_a_etudier <- liste_variables[9]
variables_a_etudier <- liste_variables[5]

for (variables_a_etudier in liste_variables_uniques) {# Pour une variable donnée
  tableau <- get(paste0("dist_eucl_", variables_a_etudier)) # On sélectionne les données concernant la distance euclidienne
  colnames(tableau)
  
  # On crée un tableau adapté pour les graphiques
  pr_graph <- melt(tableau[, c("CODGEO", 
                           "Moyenne des communes avec lesquelles la commune a fusionné",
                           "Moyenne des communes avec lesquelles la commune n'a pas fusionné")],
               id.vars = "CODGEO")
  
  
  pr_graph <- merge(pr_graph, df2011[, c("CODGEO", "CATAEU2010", "CODE_DEPT", "REG")], by = "CODGEO")
  
  # labels_variable <- c("Communes avec lesquelles\nla commune a fusionné", "Communes avec lesquelles\nla commune n'a pas fusionné")
  labels_variable <- c("Communes avec\nlesquelles la\ncommune a\nfusionné", "Communes avec\nlesquelles la\ncommune n'a\npas fusionné")
  
  boxplot <- ggplot(pr_graph, aes(x = CATAEU2010, y = value, color = variable)) +
    geom_boxplot(varwidth = FALSE) + # Pour faire varier la taille en fonction des effectifs
    # scale_color_manual(values=couleurs , labels = labels_COM_NOUV) +
    ylab(paste0("Valeur moyenne")) +
    xlab("Code ZAU") +
    scale_color_manual(name = " ", values = c("red", "blue"), labels = labels_variable) +
    ggtitle(paste0("Comparaison des moyennes\n", variables_a_etudier))
  # print (boxplot)
  
  
  
  # On modifie éventuellement le graphique pour le rendre plus lisible si valeurs extrêmes
  pr_calculs <- pr_graph$value
  upper.limit <- quantile(pr_calculs, na.rm = TRUE)[4] + 4*IQR(pr_calculs, na.rm = TRUE)
  lower.limit <- quantile(pr_calculs, na.rm = TRUE)[2] - 4*IQR(pr_calculs, na.rm = TRUE)

    print(boxplot + coord_cartesian(ylim=c(0, upper.limit)))
    # print(boxplot + coord_cartesian(ylim=c(0, 30000)) + ylab(paste0("Population moyenne")) + ggtitle(NULL) + scale_x_discrete(labels = CategZAU) +  theme(axis.text.x = element_text(angle = 45, hjust = 1)) + xlab(NULL)) # Pour graphique thèse
    # print(boxplot + coord_cartesian(ylim=c(0, 80)) + ylab(paste0("Superficie moyenne")) + ggtitle(NULL) + scale_x_discrete(labels = CategZAU) +  theme(axis.text.x = element_text(angle = 45, hjust = 1)) + xlab(NULL)) # Pour graphique thèse

  # Possibilité de vérifier la fiabilité des données avec le test de Kruskal-Wallis
  ## https://www.datanovia.com/en/fr/lessons/test-de-kruskal-wallis-dans-r/
  # res.kruskal <- pr_graph %>% kruskal_test(value ~ CATAEU2010)
  # print(as.data.frame(res.kruskal))
  
  boxplot <- ggplot(pr_graph, aes(x = REG, y = value, color = variable)) +
    geom_boxplot(varwidth = FALSE) + # Pour faire varier la taille en fonction des effectifs
    # scale_color_manual(values=couleurs , labels = labels_COM_NOUV) +
    ylab(paste0("Valeur moyenne")) +
    xlab("Région") +
    scale_color_manual(name = " ", values = c("red", "blue"), labels = labels_variable) +
    ggtitle(paste0("Comparaison des moyennes\n", variables_a_etudier))
  # print (boxplot)
  print(boxplot + coord_cartesian(ylim=c(0, upper.limit)))

   }